tg-me.com/pyproglib/6680
Last Update:
Python 3.14 планируется к релизу 7 октября 2025 года. В нем будут представлены значительные улучшения производительности, включая новый экспериментальный интерпретатор и оптимизацию различных встроенных модулей.
Кроме того, Python 3.14 вводит несколько изменений синтаксиса, которые важно учитывать разработчикам:
Сейчас разработчики могут по ошибке использовать операторы управления потоком (такие как return
, break
или continue
) в блоках finally
, что может привести к неожиданному поведению. В Python 3.14 будет выводиться SyntaxWarning при наличии таких операторов в блоках finally
.
Пример:
def return_example():
try:
print("В блоке try")
return "Возврат из блока try"
except Exception as e:
print(f"Ошибка: {e}")
finally:
print("В блоке finally")
return "Возврат из блока finally" # Перекрывает возврат из try
result = return_example()
print(f"Результат: {result}")
Вывод:
В блоке try
В блоке finally
Результат: Возврат из блока finally
Это изменение поможет избежать ошибок, когда контрольный поток блока
finally
перезаписывает поток из блоков try/except
.В Python 3.14 больше не требуется использовать скобки при перехвате нескольких исключений. Это упрощает код, но скобки всё равно необходимы, если вы используете конструкцию
as
для захвата экземпляра исключения.Пример:
def divide(a, b):
try:
result = a / b
return result
except ZeroDivisionError, TypeError: # Обработка без скобок
print(f"Неправильный ввод: {a} и {b}")
raise
Однако если вы захватываете экземпляр исключения, скобки всё равно требуются:
def divide(a, b):
try:
result = a / b
return result
except (ZeroDivisionError, TypeError) as e:
print(f"Ошибка: {e}")
raise e
Хотя это обновление и незначительное, оно упрощает код при работе с несколькими исключениями.
В предыдущих версиях Python ссылаться на класс в аннотациях типов до того, как он был полностью определён, приводило к ошибке
NameError
. Разработчики должны были использовать строковые литералы или импортировать __future__
, чтобы избежать этой проблемы. В Python 3.14 аннотации типов теперь оцениваются только по мере необходимости.Пример (до Python 3.14):
class Node:
def __init__(self, value: int, next: Node): # Ошибка NameError
self.value = value
self.next = next
Теперь в Python 3.14 нет необходимости в специальных импортируемых модулях или строковых аннотациях:
class Node:
def __init__(self, value: int, next: Node): # Работает без ошибок
self.value = value
self.next = next
Аннотации типов теперь оцениваются только во время выполнения, что делает их использование более простым и чистым.
Библиотека питониста #буст